package leetcode.editor.vscdev;

import java.util.ArrayList;

import leetcode.editor.utils.*;

public class lc501 {
    /* 给你一个含重复值的二叉搜索树（BST）的根节点 root ，找出并返回 BST 中的所有 众数（即，出现频率最高的元素）。
        如果树中有不止一个众数，可以按 任意顺序 返回。 */
}
class Solution {
    TreeNode pre = null;
    ArrayList<Integer> resList;
    int count,max;
    public int[] findMode(TreeNode root) {
        if (root == null) return new int[]{};
        count = 0;
        max = 0;
        resList = new ArrayList<>();
        func(root);
        int[] res = new int[resList.size()];
        for (int i = 0; i < resList.size(); i++) {
            res[i] = resList.get(i);
        }
        return res;
    }
    public void func(TreeNode root){
        // 左
        if (root.left != null)
            func(root.left);
        // 中 处理
        if(pre != null) {
            if (root.val == pre.val) {
                count++;
            } else {
                count = 0;
            }
        }
        if (count > max) {
            max = count;
            resList.clear();
            resList.add(root.val);
        } else if (count == max) {
            resList.add(root.val);
        }
        pre = root;
        // 右
        if (root.right != null)
            func(root.right);
    }
}